package ${domain}.module.wsys.mgr;

import ${domain}.frame.auth.Token;
import ${domain}.module.wsys.req.UserChangePwdRequest;
import ${domain}.module.wsys.req.UserResetPwdRequest;
import ${domain}.module.wsys.req.UserCreateRequest;
import ${domain}.module.wsys.req.UserDeleteRequest;
import ${domain}.module.wsys.req.UserFindRequest;
import ${domain}.module.wsys.req.UserLoginRequest;
import ${domain}.module.wsys.req.UserUpdateRequest;
import ${domain}.module.wsys.rsp.UserChangePwdResponse;
import ${domain}.module.wsys.rsp.UserResetPwdResponse;
import ${domain}.module.wsys.rsp.UserCreateResponse;
import ${domain}.module.wsys.rsp.UserDeleteResponse;
import ${domain}.module.wsys.rsp.UserFindResponse;
import ${domain}.module.wsys.rsp.UserLoginResponse;
import ${domain}.module.wsys.rsp.UserUpdateResponse;

/**
 * 用户
 *
 * @author wangbing
 * @version 0.0.1
 * @since 2017-01-01
 */
public interface UserManager {

    /**
     * 插入
     *
     * @param request 请求对象
     * @param token   令牌
     * @return
     */
    UserCreateResponse create(UserCreateRequest request, Token token);

    /**
     * 逻辑删除
     *
     * @param request 请求对象
     * @param token   令牌
     * @return
     */
    UserDeleteResponse delete(UserDeleteRequest request, Token token);

    /**
     * 更新
     *
     * @param request 请求对象
     * @param token   令牌
     * @return
     */
    UserUpdateResponse update(UserUpdateRequest request, Token token);

    /**
     * 更新密码
     *
     * @param request 请求对象
     * @param token   令牌
     * @return 响应
     */
    UserChangePwdResponse changePwd(UserChangePwdRequest request, Token token);

    /**
     * 重置密码
     *
     * @param request 请求对象
     * @param token   令牌
     * @return 响应
     */
    UserResetPwdResponse resetPwd(UserResetPwdRequest request, Token token);

    /**
     * 查询
     *
     * @param request 请求对象
     * @param token   令牌
     * @return
     */
    UserFindResponse find(UserFindRequest request, Token token);

    /**
     * 登录
     *
     * @param request 请求对象
     * @param token   令牌
     * @return
     */
    UserLoginResponse login(UserLoginRequest request, Token token);
}
